<?php


use Carbon\Carbon;

if (!function_exists('splice')) {
    /**
     * 用分隔符拼接字符串
     * splice('1,2,3','4',',') == '1,2,3,4'
     * splice('','4',',') == '4'
     * @param $str1
     * @param $str2
     * @param $splitter
     * @return string
     */
    function splice($str1, $str2, $splitter = ',')
    {
        if (empty($str1))
            return $str2;
        if (empty($str2))
            return $str1;
        return trim($str1, $splitter) . $splitter . $str2;
    }
}


if (!function_exists('get_birthday')) {

    /**
     * 获取生日
     * @param $identityCard
     * @return false|string
     */
    function get_birthday($identityCard)
    {
        $birthday = strlen($identityCard) == 15 ? ('19' . substr($identityCard, 6, 6)) : substr($identityCard, 6, 8);
        $birthday = substr_replace($birthday, '-', 6, 0);
        $birthday = substr_replace($birthday, '-', 4, 0);
        return $birthday;
    }
}
if (!function_exists('check_id_card')) {

    function check_id_card($idcard_num = ''): bool
    {
        $idcard_len = strlen($idcard_num);
        if ($idcard_num == '' || !in_array($idcard_len, array(15, 18))) {
            return false;
        }
        if ($idcard_len === 15) {
            if (!preg_match("/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/", $idcard_num)) {
                return false;
            }
        }
        if ($idcard_len === 18) {
            if (!preg_match("/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}(\d|x|X)$/", $idcard_num)) {
                return false;
            }
        }
        return true;
    }
}

if (!function_exists('get_sex')) {

    /**
     * 获取性别
     * @param $identityCard
     * @return int 1 男 2 女
     */
    function get_sex($identityCard)
    {
        return substr($identityCard, (strlen($identityCard) == 15 ? -1 : -2), 1) % 2 ? 1 : 2;
    }
}
if (!function_exists('get_age')) {
    /**
     * 获取年龄
     * @param $identityCard
     * @return int
     */
    function get_age($identityCard)
    {
        return Carbon::createFromFormat('Y-m-d', get_birthday($identityCard))->age;
    }
}
if (!function_exists('check_suffix')) {
    /**
     * 验证字符串后缀
     * @param $str
     * @param $suffix
     * @return bool
     */
    function check_suffix($str, $suffix)
    {
        return substr($str, strlen($str) - strlen($suffix)) == $suffix;
    }
}
if (!function_exists('array_key_prefix')) {
    /**
     * 数组KEY增加前缀
     * @param $array
     * @param $prefix
     * @return array
     */
    function array_key_prefix($array, $prefix)
    {
        $newArray = [];
        foreach ($array as $key => $value) {
            $newArray[$prefix . $key] = $value;
        }
        return $newArray;
    }
}
if (!function_exists('array_merge_recursive_int')) {
    /**
     * 递归合并数组 不覆盖数字键
     * @return mixed
     */
    function array_merge_recursive_int()
    {
        $arrays = func_get_args();
        $base = array_shift($arrays);
        foreach ($arrays as $array) {
            foreach ($array as $key => $value) {
                if (is_array($value) && isset($base[$key]) && is_array($base[$key])) {
                    $base[$key] = array_merge_recursive_int($base[$key], $value);
                } else {
                    $base[$key] = $value;
                }
            }
//            reset($base); //important
//            while (list($key, $value) = @each($array)) {
//                if (is_array($value) && @is_array($base[$key])) {
//                    $base[$key] = array_merge_recursive_int($base[$key], $value);
//                } else {
//                    $base[$key] = $value;
//                }
//            }
        }
        return $base;
    }
}
if (!function_exists('check_parent_code')) {
    /**
     * 检查是否是上下级区划
     * @param $parentCode
     * @param $subCode
     * @return bool
     */
    function check_parent_code($parentCode, $subCode)
    {
        $parentCode = rtrim($parentCode, '0');
        $subCode = rtrim($subCode, '0');
        return substr($subCode, 0, strlen($parentCode)) === $parentCode;
    }
}

if (!function_exists('explode_no_empty')) {
    /**
     * 分割字符串成数组，但空字符串不产生空数组
     * @param $delimiter
     * @param $string
     * @return array
     */
    function explode_no_empty($delimiter, $string)
    {
        if ($string === '' || $string === null) {
            return [];
        } else {
            return explode($delimiter, $string);
        }
    }
}


if (!function_exists('get_first_second_date_time')) {

    /**
     * 获取日期的第一秒 xx:xx:xx 00:00:00
     * @param $format
     * @param $time
     * @param DateTimeZone|null $timezone
     * @return string
     */
    function get_first_second_date_time($format, $time, DateTimeZone $timezone = null)
    {
        $dt = DateTime::createFromFormat($format, $time, $timezone);
        return $dt->format('Y-m-d 00:00:00');
    }
}

if (!function_exists('get_last_second_date_time')) {

    /**
     * 获取日期的最后一秒 xx:xx:xx 23:59:59
     * @param $format
     * @param $time
     * @param DateTimeZone|null $timezone
     * @return string
     */
    function get_last_second_date_time($format, $time, DateTimeZone $timezone = null)
    {
        $dt = DateTime::createFromFormat($format, $time, $timezone);
        return $dt->format('Y-m-d 23:59:59');
    }
}

//if (!function_exists('comma_string_diff')) {
//
//    /**
//     * 比较逗号分割的字符串里的值是否完全一样
//     * @param $commaString1
//     * @param $commaString2
//     * @return string
//     */
//    function comma_string_diff($commaString1, $commaString2)
//    {
//        $arr1 = explode(',', $commaString1);
//        $arr2 = explode(',', $commaString2);
//        return empty(array_diff($arr1, $arr2));
//    }
//
//    /**
//     * 比较第一个数组比第二个数组多的
//     * @param $commaString1
//     * @param $commaString2
//     */
////    function array_than($commaString1, $commaString2)
//}


/**
 * 验证手机号
 */
if (!function_exists('validate_cell_phone')) {
    function validate_cell_phone($str)
    {
        return preg_match('/^(13|14|15|17|18|19)[0-9]{9}$/', $str);
    }
};
